from django.conf import settings
from fdfs_client.client import Fdfs_client
from rest_framework import serializers

from goods.models import SKUImage, SKU
# from meiduo_admin.utils import get_detail_html
from celery_tasks.static_html.tasks import get_detail_html

class SKUImageSerializer(serializers.ModelSerializer):
    """
    商品图片序列化器
    """
    class Meta:
        # 指定生成序列化字段的模型类
        model = SKUImage
        # 指定字段
        fields = ('id', 'image', 'sku')

    def create(self, validated_data):
        # 保存fastDFS
        # 建立fastDFS连接对象
        client = Fdfs_client(settings.FDFS_CLIENT_PATH)
        # 获取图片数据
        image=validated_data['image']
        # 上传图片到fastDFS系统  upload_by_buffer上传文件二进制数据
        res=client.upload_by_buffer(image.read())
        # 获取返回结果，判断上传是否成功，不成功抛出异常
        if res['Status'] != 'Upload successed.':
            raise serializers.ValidationError('上传失败')
        # 获取结果中的图片地址
        img_url = res['Remote file_id']
        # 将获取到的图片地址路径保存到skuimage表中
        # img=SKUImage.objects.create(image=img_url,sku=validated_data['sku'])
        img=SKUImage.objects.create(image=img_url,sku_id=validated_data['sku'].id)
        # 静态化生成新的详情页面
        # get_detail_html(validated_data['sku'])
        get_detail_html.delay(validated_data['sku'].id)
        # 返回保存后的图片对象
        return img

    def update(self, instance, validated_data):
        # 保存fastDFS
        # 建立fastDFS连接对象
        client = Fdfs_client(settings.FDFS_CLIENT_PATH)
        # 获取图片数据
        image=validated_data['image']
        # 上传图片到fastDFS系统  upload_by_buffer上传文件二进制数据
        res=client.upload_by_buffer(image.read())
        # 获取返回结果，判断上传是否成功，不成功抛出异常
        if res['Status'] != 'Upload successed.':
            raise serializers.ValidationError('上传失败')
        # 获取结果中的图片地址
        img_url = res['Remote file_id']
        # 将获取到的图片地址路径更新到skuimage表中
        instance.sku_id=validated_data['sku'].id
        instance.image =img_url
        instance.save()

        # 静态化生成新的详情页面  异步任务调用
        # get_detail_html(validated_data['sku'])
        get_detail_html.delay(validated_data['sku'].id)
        # 返回保存后的图片对象
        return instance


class SKUSerializer(serializers.ModelSerializer):
    """
    商品图片序列化器
    """
    class Meta:
        # 指定生成序列化字段的模型类
        model = SKU
        # 指定字段
        fields = ('id','name')